import React, { useRef, RefObject } from "react";

function useRefs<key, RefType>(): [
  (key: key) => RefObject<RefType> | undefined,
  (key: key) => void
] {
  // 通过 useRef 创建的一个 ref 对象存储一个 Map 类型的变量 cacheRefs
  const cacheRefs = useRef(new Map<key, RefObject<RefType>>());
  // get 方法通过key值从 cacheRefs 中获取 ref 对象或创建一个新的 ref 对象
  function getRef(key: key): RefObject<RefType> | undefined {
    if (!cacheRefs.current.has(key)) {
      cacheRefs.current.set(key, React.createRef());
    }
    return cacheRefs.current.get(key);
  }
  // remove 方法根据 key 值从 cacheRefs 中移除对应的 ref 对象
  function removeRef(key: key):void {
    cacheRefs.current.delete(key);
  }
  // 将 get 和 remove 方法作为自定义 hook 的返回值，
  return [getRef, removeRef];
}

export default useRefs;